/**************************
* @Summary
* @Author 20009200303 赵传博
* @Date 6/7/2022
* @Note
*****************************/

#ifndef EX6_PARSER_H
#define EX6_PARSER_H
#include "ExprNode.h"
#include "common.h"

class Parser {
private:
    string exprText;
    Lexer* lexer;
    ExprNode* expr(bool get);
    ExprNode* term(bool get);
    ExprNode* prim(bool get);

    /**
     * 由于Lexer变成了单例模式，而在Expr中也调了Parser的构造函数，
     * 所以Parser也要变成单例模式
     */
    Parser();
    static Parser* parserInstance;
public:

    static Parser* getInstance();
    //解析一个字符串表达式，并返回这个表达式的树根
    ExprNode* parse_expr(const char* strExpr);
    ~Parser();
};


#endif //EX6_PARSER_H
